package servlets;

import java.util.ArrayList;
import java.util.List;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bdelegate.BdelegateWeb;
import beans.*;
import rmi.*;

public class AperturaMesa extends HttpServlet {

	private static final long serialVersionUID = 1L;
	//private SucursalBean sucursal = new SucursalBean();
	private String host = "http://localhost:8080/TPO_-_Web/";
	/**
	 * DoGet
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        doPost(request, response);
    }
	
	/**
	 * DoPost
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
		 String accion = request.getParameter("accion");
		 Integer idSucursal = Integer.parseInt(request.getParameter("idSucursal"));
		 
         String jspPage = "/terminal_mozo/home.jsp";
         BdelegateWeb bd = BdelegateWeb.getInstancia();
         
         if ((accion == null) || (accion.length() < 1))
         {
             accion = "default";
         }

         if ("default".equals(accion))
         {
        	 //paso los datos de la sucursal
        	 //SucursalBean sucursal = bd.obtenerDatosSucursal(Integer.parseInt(request.getParameter("idSucursal")));
        	 //request.setAttribute("datosSucursal", sucursal);
        	 jspPage = "/terminal_mozo/home.jsp";
         }
         
         //accion para ir a la pantalla de nueva apertura de mesa
         if("abrirMesa".equals(accion)) {
        	 request.setAttribute("idSucursal", idSucursal);
        	 jspPage = "/terminal_mozo/aperturaMesa.jsp"; 
         }
         //accion para redireccionar a la apertura de mesa
         else if("cancelar".equals(accion)) {
        	 jspPage = "/terminal_mozo/home.jsp";
         }
         //accion para generar una nueva apertura de mesa
         else if("procesarAperturaMesa".equals(accion)) {
        	 
        	//Obtengo los datos de la sucursal
        	SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	
        	//nro de mesas de casa sucursal (fijo pou ahora)
        	Integer nroMesas = 34;
        	 
        	//levanto los parametros necesarios para procesar la AM.
        	Integer cantComensales = Integer.parseInt(request.getParameter("cantComensales")); 
        	Integer sectorId = Integer.parseInt(request.getParameter("sectorId"));
        	Integer mozoId = Integer.parseInt(request.getParameter("mozoId"));
        	
        	 //mesas
        	List<MesaBean> mesasSector = MetodosServlets.getInstancia().buscarMesasPorSector(sucursal, sectorId);
//        	Integer inicioIdMesa = MetodosServlets.getInstancia().obtenerPrimerIdMesas(sucursal, sectorId);
//        	Integer finalIdMesa = inicioIdMesa + (nroMesas - 1);
        	Integer inicioIdMesa = 1;
        	Integer finalIdMesa = 34;	
        		
        	Integer[] mesasId = new Integer[finalIdMesa+1];
        	
        	for(Integer i=inicioIdMesa; i<= finalIdMesa; i++) {
//        		System.out.println("ID Mesa: "+i);
        		 //valido si en el formulario la mesa esta marcada como seleccionada
//        		System.out.println("Request parameter: "+request.getParameter("mesa_" + i));
        		
        		String mesaSelected = request.getParameter("mesa_" + i); 
        		
        		mesasId[i] = 0;
        		
        		if(mesaSelected != null) {
	        		if( !mesaSelected.isEmpty() && mesaSelected.equals("1")) {
	        			 System.out.println("entro");
	        			 System.out.println("valor i: " + i);
	        			 //Integer = request.getParameter("mesa_" + i);
	        			 mesasId[i] = i;
	        		 }
        		}
        	 }
        	 
        	 //Armo los objetos necesarios para pasarle al BD
        	 List<MesaBean> mesas = MetodosServlets.getInstancia().buscarMesasSeleccionadas(mesasId, sectorId, sucursal);
        	 MozoBean mozo = MetodosServlets.getInstancia().buscarMozo(mozoId, sucursal);
        	 
        	 //hago la llamada al Bdelegate
        	 boolean fallo = bd.abrirMesa(cantComensales, mesas, mozo, idSucursal);
        	 if(!fallo) {
        		 //mando mensaje success.
        		 jspPage = "/terminal_mozo/home.jsp?message=succees";
        	 } else {
        		 //mando mensaje error.
        		 jspPage = "/terminal_mozo/home.jsp?message=error";
        	 }
        	 
        	 jspPage = "/terminal_mozo/home.jsp";
        	 
         } else if("abrirMesasSucursal".equals(accion) ) {
        	 //abrir pagina para seleccionar mesas...
     
        	//Obtengo los datos de la sucursal
        	SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
         	//armo el mapa de las mesas.
         	List<MesaBean> mesasSalon = MetodosServlets.getInstancia().buscarMesas(sucursal);
        	String mapaMesas  = MetodosServlets.getInstancia().mapearMesas(mesasSalon);
        	//paso el mapa a la vista
        	
        	System.out.println(mapaMesas);
        	
        	request.setAttribute("mapaMesas", mapaMesas);
        	jspPage = "/terminal_mozo/mapaMesaSuc"+ idSucursal +".jsp"; 
         }else if("cierreMesa".equals(accion)) {
        	 //cierre de una mesa
        	 request.setAttribute("idSucursal", idSucursal);
        	 jspPage = "/cajero/cierreMesa.jsp";
         } else if("cierreMesaPaso2".equals(accion)) {
        	 //paso 2 del cierre de mesa
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 request.setAttribute("idSucursal", idSucursal);
        	 //paso los datos del paso 1
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 request.setAttribute("aperturaMesaId", aperturaMesaId);
        	 
        	//genero la tabla de items pedidos
        	 List<PedidoBean> pedidos = MetodosServlets.getInstancia().buscarPedidosPorAperturaMesa(aperturaMesaId, sucursal);
        	 String tablaPedidos = MetodosServlets.getInstancia().generarTablaCierrePedidosApMesa(pedidos);
        	 request.setAttribute("tablaPedidos", tablaPedidos);
        	 
        	 //calculo del total a facturar.
        	 Float total = MetodosServlets.getInstancia().calcularTotalPedidos(pedidos);
        	 request.setAttribute("totalAFacturar", total);
        	 
        	 jspPage = "/cajero/cierreMesa_2.jsp";
         }else if("procesarCierreMesa".equals(accion)){
        	 //procesamiento de cierre de mesa.
        	 //paso los datos del paso 1
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 AperturaMesaBean apMesa = MetodosServlets.getInstancia().buscarAperturaMesa(aperturaMesaId, sucursal);
        	 
        	 bd.cierreMesa(apMesa);
        	 
        	 jspPage = "/cajero/home.jsp?message=succees";
         }
         else if("registrarPago".equals(accion)){
        	 //accion para mostrar la primer pantalla de registrar pago
        	 request.setAttribute("idSucursal", idSucursal);
        	 jspPage = "/cajero/registrarPago.jsp";
         }
         else if("registrarPagoPaso2".equals(accion)) {
        	 //paso 2 para registrar el pago
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 request.setAttribute("idSucursal", idSucursal);
        	 //paso los datos del paso 1
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 request.setAttribute("aperturaMesaId", aperturaMesaId);
        	 //Integer mozoId = Integer.parseInt(request.getParameter("mozoId"));
        	 //request.setAttribute("mozoId", mozoId);
        	 
        	 //genero la tabla de items pedidos
        	 List<PedidoBean> pedidos = MetodosServlets.getInstancia().buscarPedidosPorAperturaMesa(aperturaMesaId, sucursal);
        	 String tablaPedidos = MetodosServlets.getInstancia().generarTablaCierrePedidosApMesa(pedidos);
        	 request.setAttribute("tablaPedidos", tablaPedidos);
        	 
        	 //calculo del total facturado.
        	 Float total = MetodosServlets.getInstancia().calcularTotalPedidos(pedidos);
        	 request.setAttribute("totalFacturado", total);
        	 
        	 jspPage = "/cajero/registrarPago_2.jsp";
         }else if("procesarRegistroPago".equals(accion)){
        	 //procesamiento de cierre de mesa.
        	 //paso los datos del paso 2
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 AperturaMesaBean apMesa = MetodosServlets.getInstancia().buscarAperturaMesa(aperturaMesaId, sucursal);
        	 String formaDePago = request.getParameter("formaDePago");
        	 
        	 bd.registrarPago(apMesa, sucursal, formaDePago);
        	 
        	 jspPage = "/cajero/home.jsp?message=succees";
         }else if("liberarMesa".equals(accion)){
        	 //accion para mostrar la primer pantalla de registrar pago
        	 request.setAttribute("idSucursal", idSucursal);
        	 jspPage = "/cajero/liberarMesa.jsp";
         }else if("procesarLiberarMesa".equals(accion)){
        	 //procesamiento de liberacion de mesa.
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 AperturaMesaBean apMesa = MetodosServlets.getInstancia().buscarAperturaMesa(aperturaMesaId, sucursal);
        	 
        	 bd.liberarMesa(apMesa);
        	 
        	 jspPage = "/cajero/home.jsp?message=succees";
         }
         
         dispatch(jspPage, request, response);
         
    }
	
	/**
	 * Dispatch
	 * 
	 * @param jsp
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void dispatch(String jsp, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        if (jsp != null)
        {
        	/*Envia el control al JSP que pasamos como parametro, y con los 
        	 * request / response cargados con los parametros */
        	RequestDispatcher rd = request.getRequestDispatcher(jsp);
            rd.forward(request, response);
        }
    }
}
